package com.eling.elcms.travel.service.impl;

import com.eling.elcms.basedoc.model.CommunityData;
import com.eling.elcms.basedoc.service.ICommunityDataManager;
import com.eling.elcms.core.service.impl.GenericManagerImpl;
import com.eling.elcms.core.util.PropertyUtils;
import com.eling.elcms.travel.dao.IProductRuleDetailDao;
import com.eling.elcms.travel.model.*;
import com.eling.elcms.travel.model.view.PdSvcView;
import com.eling.elcms.travel.model.view.ProductView;
import com.eling.elcms.travel.service.IProductManager;
import com.eling.elcms.travel.service.IProductRuleDetailManager;
import com.eling.elcms.travel.service.IProductRuleManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@Service
public class ProductRuleDetailManagerImpl extends GenericManagerImpl<ProductRuleDetail, Long> implements IProductRuleDetailManager{
	IProductRuleDetailDao productDetailDao;
	@Autowired
	private IProductManager productManager;
	@Autowired
	private IProductRuleManager productRuleManager;
	@Autowired
	private ICommunityDataManager communityDataManager;
	@Autowired
	public void setDao(IProductRuleDetailDao dao) {
        this.dao = dao;
        this.productDetailDao = dao;
    }

	@Override
	public List<ProductRuleDetail> saveall(ProductView cond) {
		List<CommunityData> cdlist=cond.getCommunityDatas();
		List<Long> tlist=new ArrayList<Long>();
		for(CommunityData cd:cdlist){
			tlist.add(cd.getPkCommunityData());
		}
		CommunityData cd=new CommunityData();
		PropertyUtils.setProperty(cd, "pkCommunityDataIn", tlist);
		List<CommunityData> com=communityDataManager.query(cd);
		cond.getProductRule().setCommunityDatas(new HashSet<CommunityData>(com));
		ProductRule p=productRuleManager.save(cond.getProductRule());
		List<PdSvcView> list=cond.getList();
		if(cond.getProductRule()!=null&&cond.getProductRule().getPkProductRule()!=null){//修改主表时删除子表
			List<Long> pklist=cond.getPklist();//要删除的子表pk
			if(pklist!=null&&pklist.size()>0){
				ProductRuleDetail ptd=new ProductRuleDetail();
				PropertyUtils.setProperty(ptd, "pkProductRuleDetailIn",pklist);
				List<ProductRuleDetail> plist=productDetailDao.query(ptd);//要删除对象集合
				remove(plist);
			}
		}
		List<ProductRuleDetail> returnlist=new ArrayList<ProductRuleDetail>();
		if(list!=null&&list.size()>0){
			for(PdSvcView pd:list){
				if(pd.getProductDetail()!=null){
					ProductRuleDetail pl=pd.getProductDetail();//得到一个子表数据
					pl.setProductRule(p);
					if (pd.getRuleScopes()!= null){
						pl.setRuleScopes(new HashSet<RuleScope>(pd.getRuleScopes()));//一个子表对应的所有适用范围
					}else{
						pl.setRuleScopes(new HashSet<RuleScope>());
					}
					if (pd.getRules()!= null){
						pl.setSettlementsRules(new HashSet<SettlementsRule>(pd.getRules()));//3种规则的集合
					}else{
						pl.setSettlementsRules(new HashSet<SettlementsRule>());
					}
					returnlist.add(pl);
				}
			}
			returnlist=super.save(returnlist);
		}
		return returnlist;
	}

	@SuppressWarnings("unused")
	@Override
	public List<ProductRuleDetail> queryonly(ProductRuleDetail cond) {
		String temp="";//前台数据拼接成的字符串
		if(cond.getProductRule()!=null&&cond.getProductRule().getProduct()!=null&&cond.getProductRule().getProduct().getName()!=null
				&&cond.getProductType()!=null&&cond.getProductType().getName()!=null
				&&cond.getProductBatch()!=null&&cond.getProductBatch().getName()!=null){//前台的产品+类型+批次都不为空
			temp=cond.getProductRule().getProduct().getName()+cond.getProductType().getName()+cond.getProductBatch().getName();
		}else if(cond.getProductRule()!=null&&cond.getProductRule().getProduct()==null
				&&cond.getProductType()!=null&&cond.getProductType().getName()!=null
				&&cond.getProductBatch()!=null&&cond.getProductBatch().getName()!=null){//前台的产品为空，类型+批次都不为空
			temp=cond.getProductType().getName()+cond.getProductBatch().getName();
		}else if(cond.getProductRule()!=null&&cond.getProductRule().getProduct()!=null&&cond.getProductRule().getProduct().getName()!=null
				&&cond.getProductType()!=null&&cond.getProductType().getName()!=null
				&&cond.getProductBatch()==null){//前台的产品+类型都不为空,批次为空
			temp=cond.getProductRule().getProduct().getName()+cond.getProductType().getName();
		}else{
			;
		}
		
		List<ProductRuleDetail> list=super.query(cond);
		if(list.size()>0){
			for(ProductRuleDetail pd:list){
				String tem="";//后台查询回来的数据拼接成的字符串
				if(pd.getProductRule()!=null&&pd.getProductRule().getProduct()!=null&&pd.getProductRule().getProduct().getName()!=null
						&&pd.getProductType()!=null&&pd.getProductType().getName()!=null
						&&pd.getProductBatch()!=null&&pd.getProductBatch().getName()!=null){//后台的产品+类型+批次都不为空
					tem=pd.getProductRule().getProduct().getName()+pd.getProductType().getName()+pd.getProductBatch().getName();
				}else if(pd.getProductRule()!=null&&pd.getProductRule().getProduct()==null
						&&pd.getProductType()!=null&&pd.getProductType().getName()!=null
						&&pd.getProductBatch()!=null&&pd.getProductBatch().getName()!=null){//后台的产品为空，类型+批次都不为空
					tem=pd.getProductType().getName()+pd.getProductBatch().getName();
				}else if(pd.getProductRule()!=null&&pd.getProductRule().getProduct()!=null&&pd.getProductRule().getProduct().getName()!=null
						&&pd.getProductType()!=null&&pd.getProductType().getName()!=null
						&&pd.getProductBatch()==null){//前台的产品+类型都不为空,批次为空
					tem=pd.getProductRule().getProduct().getName()+pd.getProductType().getName();
				}else{
					continue;
				}
				continue;
//				if(tem.equals(temp)){
//					//throw new BusinessException("产品—产品类型—产品批次名称存在重复！");
//				}else{
//					continue;
//				}
			}
		}
		return list;
	}
	
	@Override
	public SettlementsRule getPdSetlRuleByType(ProductRuleDetail detail, RuleType type) {
		for (SettlementsRule rule : detail.getSettlementsRules()){
			if (rule.getType() == type){				
				return rule;
			}
		}
		return null;
	}
	
	@Override
	public List<RuleScope> getPdSetlRuleScopeByType(ProductRuleDetail detail, RuleType type) {
		List<RuleScope> result = new ArrayList<RuleScope>();
		for (RuleScope scope : detail.getRuleScopes()){
			if (scope.getRuleType() == type){				
				result.add(scope);
			}
		}
		return result;
	}

	@Override
	public List<ProductBatch> queryBatch(Long pkProductType) {
		List<ProductBatch> batchList= productDetailDao.queryBatch(pkProductType);
		return batchList;
	}
}
